package com.luoran.bartalks.service;

import java.util.List;

import org.beetl.sql.core.engine.PageQuery;
import org.springframework.transaction.annotation.Transactional;

import com.luoran.bartalks.action.vo.PackingListMaterielOfExportVo;
import com.luoran.bartalks.action.vo.ScanMaterielResultVo;
import com.luoran.bartalks.entity.BaseInfo;
import com.luoran.bartalks.entity.biz.BtMateriel;
import com.luoran.bartalks.entity.biz.BtPackingListMateriel;

public interface IBtPackingListMaterielService {

	// 添加箱单物料
	@Transactional
	String addPackingListMateriel(BtPackingListMateriel packingListMateriel);

	PageQuery<? extends BaseInfo> getQueryList(PageQuery<? extends BaseInfo> pageQuery);

	// 根据计划ID查询箱单物料表的物料二维码
	List<String> checkMaterielQrcodeOnlyByCompanyId(String companyId);

	// 删除
	int deletePackingListMateriel(String idl);

	// 主键查询
	BtPackingListMateriel getItem(String id);

	// 通过箱单ID 查询装的物料
	List<BtPackingListMateriel> getMaterielsByPackingListId(String packingListId);

	// 通过箱单ID 查询装的物料报表使用
	List<PackingListMaterielOfExportVo> getMaterielsByPackingListIdOfExport(String packingListId);

	// 通过箱单ID 查询容器
	List<BtPackingListMateriel> getContainerByPackingListId(String packingListId);

	// 物料编码查询箱单,校验当前物料是否被引用
	List<BtPackingListMateriel> hasMateriel(String materielCode, String companyId);

	// 根据箱单物料关系id和计划id 校验当前扫描物料是否合法
	BtPackingListMateriel getItemByPackingListMaterielIdAndPlanId(String packingListMaterielId, String planId);

	// 根据箱单物料二维码和公司id 校验当前扫描物料是否合法
	BtPackingListMateriel getItemByMaterielQrcodeAndCompanyId(String qrcode, String companyId);

	// 根据箱单物料关系id和公司id 查询
	BtPackingListMateriel getItemByPackingListMaterielIdAndCompanyId(String packingListMaterielId, String companyId);

	// 获取扫描结果
	ScanMaterielResultVo getScanMaterielResult(String packingListMaterielId, String companyId);

	// 根据详单物料关系id,获取物料信息
	BtMateriel getMaterielByPackingListMaterielId(String packingListMaterielId, String companyId);

	// 根据公司ID获取二维码为唯一标识的物料信息
	List<BtPackingListMateriel> checkMaterielOfAppByCompanyId(String companyId);

	// 获取该用户合理的物料信息
	List<BtPackingListMateriel> getMaterielOfApp(String companyId, String userId);

	// 根据物料二维码信息，公司ID 查询
	BtPackingListMateriel getByMaterielQrcodeAndCompanyId(String materielQrcode, String companyId);
}
